package org.agilelang.editor.view.tree;

/*
 AgileLang - A fourth generation language(http://www.agilelang.org).

 Copyright (C) 2013 Roderick Cusirramos (roderick20@hotmail.com)

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

import java.awt.*;
import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
import org.agilelang.editor.ViewFrame;
import org.agilelang.editor.tool.Util;

// Esta es la clase que va a permitir personalizar la presentación
  // de cada una de las ramas del árbol, de forma que no solamente
  // tengamos el texto correspondiente a la carta, o palo de la
  // baraja, sino un icono mostrando su imagen
  public class RendererTree extends JLabel implements TreeCellRenderer {
    private ImageIcon app;
    private ImageIcon[] folder;
    private ImageIcon[] files;
    private boolean seleccionado;
    ViewFrame frame;

    public RendererTree(ViewFrame frame) {
        this.frame = frame;
        // Cargamos las imgenes de las cartas
      app = new ImageIcon( Util.getIconImage("org/agilelang/editor/resources/img16/app.png") );//
      folder = new ImageIcon[2];
      folder[0] = new ImageIcon( Util.getIconImage("org/agilelang/editor/resources/img16/folder.png") );
      folder[1] = new ImageIcon( Util.getIconImage("org/agilelang/editor/resources/img16/folder-open.png") );
      files = new ImageIcon[1];
      files[0] = new ImageIcon( Util.getIconImage("org/agilelang/editor/resources/img16/file.png") );
      /*files[1] = new ImageIcon( getIconImage("ModelTree/file-php.png") );
      files[2] = new ImageIcon( getIconImage("ModelTree/file-html.png") );
      files[3] = new ImageIcon( getIconImage("ModelTree/file-css.png") );
      files[4] = new ImageIcon( getIconImage("ModelTree/file-js.png") );
      files[5] = new ImageIcon( getIconImage("ModelTree/file-properties.png") );
      files[6] = new ImageIcon( getIconImage("ModelTree/file-ini.png") );
      files[7] = new ImageIcon( getIconImage("ModelTree/file-sql.png") );
      files[8] = new ImageIcon( getIconImage("ModelTree/file-config.png") );
      files[9] = new ImageIcon( getIconImage("ModelTree/file-access.png") );
      files[10] = new ImageIcon( getIconImage("ModelTree/file-image.png") );
      files[11] = new ImageIcon( getIconImage("ModelTree/file-xml.png") );*/
    }

    public Component getTreeCellRendererComponent( JTree arbol,
        Object valor,boolean seleccionado,boolean expandido,
        boolean rama,int fila,boolean conFoco ) {
        // Hay que encontrar el nodo en que estamos y coger el
        // texto que contiene

        DefaultMutableTreeNode nodo = (DefaultMutableTreeNode)valor;
        
        String texto = (String)nodo.toString();


        this.seleccionado = seleccionado;
        // Se fija el color de fondo en función de que esté o no
        // seleccionada la celda del árbol
        if( !seleccionado )
            setForeground( Color.black );
        else
            setForeground( Color.white );
        // Fijamos el icono que corresponde al texto de la celda, para
        // presentar la imagen de la carta que corresponde a esa celda


        //Model.Instance().get("ProjectPath")+Model.Instance().get("ProjectName");
        String path = this.frame.getPathProject();
        File  directorio = new File(texto);
        if(texto.equals(path)){
            setIcon( app );
            setText( "  "+directorio.getName()+"  " );
            return( this);
        }

        if (directorio.isDirectory()){
            setIcon( folder[0] );
            setText( "  "+directorio.getName()+"  " );
            return( this);
        }
        else{
            if( texto.endsWith(".xml") ){
                setIcon( files[0] );
                setText(  "  "+directorio.getName()+"  " );
                return( this);
            }
            if( texto.endsWith(".sql") ){
                setIcon( files[0] );
                setText(  "  "+directorio.getName()+"  " );
                return( this);
            }
            if( texto.endsWith(".agile") ){
                setIcon( files[0] );
                setText(  "  "+directorio.getName()+"  " );
                return( this);
            }            
            else{
                setIcon( files[0] );
                setText(  "  "+directorio.getName()+"  " );
                return( this );
            }
        }
    }

    // Sobreescribimos el método paint() para fijar el color de
    // fondo. Normalmente, un JLabel puede pintar su propio fondo,
    // pero, seguramente debido aparentemente a un bug, o a una
    // limitación en el TreeCellRenderer, es necesario recurrir
    // al método paint() para hacer esto
    public void paint( Graphics g ) {
      Color color;
      Icon currentI = getIcon();

      // Fijamos el colos de fondo
      //color = seleccionado ? Color.BLUE : Color.white;
      color = seleccionado ? new Color( 100, 149, 237 ) : Color.white;
      //
      g.setColor( color );
      // Rellenamos el rectángulo que ocupa el texto sobre la
      // celda del árbol
      g.fillRect( 0,0,getWidth()-1,getHeight()-1 );

      super.paint( g );
    }

   

    






}